package JAVA并发;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @author zhangmin
 * @create 2022-03-14 21:07
 * 一、使用线程
 * 三种使用线程的方法--实现Runnable接口，实现Callable接口，继承Tread类
 *       对比：java不支持多重继承，因此Thread类就无法继承其他类了，但是接口可以实现多个
 *            类可能只要求可执行就行，继承整个Thread类开销过大了
 */

//方法1、实现Runnable接口
class MyRunnable implements Runnable{
    //实现Runnable接口，需要实现run方法
    @Override
    public void run() {
        System.out.println("run myRunnable...");
    }
}

//方法2、实现Callable接口---可以有返回值
class MyCallable implements Callable<Integer>{
    @Override
    public Integer call() throws Exception {
        return 123;
    }
}

//方法3、继承Thread类，Thread类也是实现了Runnable接口的，所以也需要实现run方法
class MyThread extends Thread{
    public void run(){
        System.out.println("run myThread...");
    }
}

public class UseThread1 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
/*        MyRunnable instance=new MyRunnable();
        Thread thread=new Thread(instance);
        //用thread的start方法启动线程
        thread.start();*/

/*        MyCallable mc=new MyCallable();
        //使用FutureTask来接收结果
        FutureTask<Integer> ft=new FutureTask<>(mc);
        Thread thread1=new Thread(ft);
        thread1.start();
        //可以在ft中获取到结果
        System.out.println(ft.get());*/

        MyThread mt=new MyThread();
        mt.start();
    }

}
